package com.briup.day03;

import java.util.Scanner;

public class Homework {
    public static void main(String[] args) {
        //请编写一个Java程序，实现从键盘中输入年份月份日期，输出这一天是该年的第几天
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年份:");
        int year = sc.nextInt();
        System.out.println("请输入月份:");
        // 先写右边，在通过alt+enter/ctrl+1进行提示，可以自动引入局部变量
        int month = sc.nextInt();
        System.out.println("请输入日期:");
        int day = sc.nextInt();
        int total = day;
        // 根据月份，该月之前的月份已过，所以之前月份的天数都需要加起来
        for (int i = 1; i < month; i++) {
            /*switch (i) {
                case 1, 3, 5, 7, 8, 10:
                    total += 31;
                    break;
                case 2:
                    total += isLeapYear(year) ? 29 : 28;
                    break;
                case 4, 6, 9, 11:
                    total += 30;
            }*/
            // 在jdk17中，switch可以返回值
            total += switch (i) {
                // 如果i=1, 3, 5, 7, 8, 10 结果是返回31
                case 1, 3, 5, 7, 8, 10 -> 31;
                case 2 -> isLeapYear(year) ? 29 : 28;
                case 4, 6, 9, 11 -> 30;
                default -> {
                    System.out.println("您当前输入的月份有误，请检查后重新输入");
                    // 如果在switch写了一个代码块，需要有返回值，那么需要通过 yield关键字进行指定返回
                    yield 0;
                }
            };
        }
        System.out.printf("%s年%s月%s日属于%s年内的第%s天", year, month, day, year, total);
    }

    private static void method1() {
        //请编写一个Java程序，实现从键盘中输入年份月份日期，输出这一天是该年的第几天
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年份:");
        int year = sc.nextInt();
        System.out.println("请输入月份:");
        // 先写右边，在通过alt+enter/ctrl+1进行提示，可以自动引入局部变量
        int month = sc.nextInt();
        System.out.println("请输入日期:");
        int day = sc.nextInt();
        // 根据月份，该月之前的月份已过，所以之前月份的天数都需要加起来
        int total = 0;
        switch (month) {
            case 12:
                total += 30;
            case 11:
                total += 31;
            case 10:
                total += 30;
            case 9:
                total += 31;
            case 8:
                total += 31;
            case 7:
                total += 30;
            case 6:
                total += 31;
            case 5:
                total += 30;
            case 4:
                total += 31;
            case 3:
                total += isLeapYear(year) ? 29 : 28;
            case 2:
                total += 31;
            case 1:
                total += day;
        }
        System.out.printf("%s年%s月%s日属于%s年内的第%s天", year, month, day, year, total);
    }

    private static boolean isLeapYear(int year) {
        return year % 400 == 0 || year % 4 == 0;
    }

    private static void test() {
        /*
            不同分支结构的使用场景：
                if...else：使用在两个分支，二选一的场景
                if...else if...else：用于在分支大于等于3的多分支选择的情况下，
                    并且分支的条件是一个区间的情况下，建议选择使用本分支结构
                switch...case：用于在条件结果是有限的并且结果是确定的某些单个值时，
                    在这些分支中多选一，可以私用switch...case结构
         */
        // 根据输入的成绩，判断其所在的等级，可以使用if...else if...else
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的成绩:");
        int score = sc.nextInt();
        if (score > 100 || score < 0) {
            System.out.println("输入的成绩不符合规定区间");
        } else if (score >= 90) {
            System.out.println("您的成绩等级为：A");
        } else if (score >= 80) {
            System.out.println("您的成绩等级为：B");
        } else if (score >= 70) {
            System.out.println("您的成绩等级为：C");
        } else if (score >= 60) {
            System.out.println("您的成绩等级为：D");
        } else {
            System.out.println("您的成绩等级为：不合格");
        }

        // 当我们要给月份进行分类时，即在键盘中输入月份，得出该月份所处的季节
        // 这时，我们可以使用switch...case
        System.out.println("请输入月份:");
        int month = sc.nextInt();
        switch (month) {
            // jdk 17中可以将同质的分支进行合并定义 --> jdk 14的语法中对switch的增强
            case 3, 4, 5:
                System.out.println("春天");
                break;
            case 6, 7, 8:
                System.out.println("夏天");
                break;
            case 9, 10, 11:
                System.out.println("秋天");
                break;
            case 12, 1, 2:
                System.out.println("冬天");
                break;
            default:
                System.out.println("请输入正确的月份");
        }
    }
}
